package acessoDados.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;

import acessoDados.dao.PessoaDAO;
import constants.ProjectConstants;

public class PessoaDAOImpl extends BaseDAOImpl implements PessoaDAO {


	public void criaPessoa(String login, String password, String bi, String nome, String email, String telemovel, String funcao) throws SQLException, ClassNotFoundException {
		
		if(funcao==null)
			funcao=ProjectConstants.CLIENTE+"";
		if(funcao.equalsIgnoreCase("0") || funcao.isEmpty())
			funcao=ProjectConstants.CLIENTE+"";
		
		String query = "SELECT * FROM utilizador WHERE login='"+login +"';";
		ResultSet s = executaQuery(query);
		if(!s.next()){
			String query2 = "INSERT INTO utilizador (login , password, bi, nome, email, telemovel, funcao, milhasAcumuladas)" + "VALUES ('" + login + "', '" + password + "', " + bi + ", '" + nome + "', '" + email + "', " + telemovel + ", "+funcao+", 0);";
			executaQueryUpdate(query2);
		}
		
	}

	public String getPass(String login) throws SQLException, ClassNotFoundException {
		String query = "SELECT c.password FROM utilizador c WHERE c.login='"+login +"';";
		ResultSet s = executaQuery(query);
		if(s.next()){
			System.out.println("Obteve a password: "+s.getString("password"));
			return s.getString("password");
		}
		return "";
	}
	
	public String getFuncao(String login) throws SQLException, ClassNotFoundException {
		String query = "SELECT c.funcao FROM utilizador c WHERE c.login='"+login +"';";
		ResultSet s = executaQuery(query);
		if(s.next()){
			System.out.println("Obteve a Funcao: "+s.getString("funcao"));
			return s.getString("funcao");
		}
		return "";
	}

	public  boolean editPessoa(String loginAnterior, String login, String password, String bi,
			String nome, String email, String telemovel, String funcao) throws SQLException, ClassNotFoundException {

		String query = "UPDATE utilizador " +
				"SET " +
				"login='" + login +
				"', password='" + password +
				"', bi=" + bi +
				", nome='" + nome +
				"', email='" + email +
				"', telemovel=" + telemovel +
				", funcao=" + funcao +
				" WHERE login='" + loginAnterior + "';";
		
		if(login.equalsIgnoreCase(loginAnterior))
			executaQueryUpdate(query);
		else{
			String query2 = "SELECT * FROM utilizador WHERE login='"+login +"';";
			ResultSet s = executaQuery(query2);
			if(!s.next()){
				executaQueryUpdate(query);
			}
		}
		return true;
	}

	public void deletePessoa(String login) throws SQLException, ClassNotFoundException {
		String query = "DELETE FROM utilizador " +
		" WHERE login='" + login + "';";

		executaQueryUpdate(query);
	}
	
	public  ResultSet getFuncionarios() throws SQLException, ClassNotFoundException {
		String query = "SELECT login FROM utilizador WHERE funcao>="+ProjectConstants.FUNCIONARIO+";";
		return executaQuery(query);
	}

	public  ResultSet getClientes() throws SQLException, ClassNotFoundException {
		String query = "SELECT login FROM utilizador WHERE funcao="+ProjectConstants.CLIENTE+";";
		return executaQuery(query);
	}

	public  ResultSet getTripulantes() throws SQLException, ClassNotFoundException {
		String query = "SELECT login FROM utilizador WHERE funcao="+ProjectConstants.TRIPULANTE+";";
		return executaQuery(query);
	}

	public  ResultSet getDetalhesFuncionario(String login) throws SQLException, ClassNotFoundException {
		String query = "SELECT * FROM utilizador WHERE funcao>="+ProjectConstants.FUNCIONARIO+" AND login='"+login+"';";
		return executaQuery(query);
	}

	public  ResultSet getDetalhesCliente(String login) throws SQLException, ClassNotFoundException {
		String query = "SELECT * FROM utilizador WHERE funcao="+ProjectConstants.CLIENTE+" AND login='"+login+"';";
		return executaQuery(query);
	}

	public  ResultSet getDetalhesTripulante(String login) throws SQLException, ClassNotFoundException {
		String query = "SELECT * FROM utilizador WHERE funcao="+ProjectConstants.TRIPULANTE+" AND login='"+login+"';";
		return executaQuery(query);
	}
	
	public  void addMilhas(String login, long milhas) throws SQLException, ClassNotFoundException {
		String query = "UPDATE utilizador" +
		//" SET milhasAcumuladas=milhasAcumuladas+" + Math.round(milhas*ProjectConstants.PERCENTAGEM_DE_MILHAS_PARA_ACUMULACAO) +
		" SET milhasAcumuladas=milhasAcumuladas+" + milhas +
		" WHERE login='" + login + "';";
		executaQueryUpdate(query);
	}
	
}
